# HG changeset patch
# User Martin Blais <blais@furius.ca>
# Date 1407690283 14400
# Node ID e3cdca0088916446b019dcbf8ea7164cc5f788ac
# Parent  5ebaec3d8cb9bb8eaf0600acee495a1ffc28b67c
Applied patch from <john dot schmerge at gmail dot com> for bison 3.0.2

diff --git a/src/resParser.cpp b/src/resParser.cpp
--- a/src/resParser.cpp
+++ b/src/resParser.cpp
@@ -73,7 +73,7 @@
 
 //------------------------------------------------------------------------------
 //
-void resParsererror( const char* msg )
+void resParsererror( XxResources *, const char* msg )
 {
    // Send errors to stdout so we can filter out the debug info shmeglu while
    // debugging parser.
@@ -794,7 +794,7 @@
       QString os;
       QTextStream oss( &os );
       oss << "Unknown " << errmsg << ": " << name << flush;
-      resParsererror( os.toLatin1().constData() );
+      resParsererror( NULL, os.toLatin1().constData() );
    }
    num = ERROR_TOKEN;
    return ERROR_TOKEN;
diff --git a/src/resParser.l b/src/resParser.l
--- a/src/resParser.l
+++ b/src/resParser.l
@@ -76,7 +76,7 @@
    result = YY_NULL;                                                   \
 }                                                                      \
 else {                                                                 \
-   int ii = 0;                                                         \
+   unsigned ii = 0;                                                         \
    for ( ; (ii < max_size) && (!input_stream_ptr->atEnd()); ++ii ) {   \
 	(*input_stream_ptr) >> buf[ii]; \
    }                                                                   \
diff --git a/src/resParser.y b/src/resParser.y
--- a/src/resParser.y
+++ b/src/resParser.y
@@ -20,11 +20,6 @@
  *
  ******************************************************************************/
 
-%union
-{
-    int   num;
-    char* str;
-}
 %{
 
 // xxdiff imports
@@ -39,12 +34,22 @@
 
 // The parser input is the resources object to fill in.
 #define RESOURCES  ( static_cast<XxResources*>(resources) )
-#define YYPARSE_PARAM resources
+%}
 
+%define api.pure full
+%parse-param {XxResources * resources}
+
+%union
+{
+    int   num;
+    char* str;
+}
+
+%{
 // Declare lexer from other compilation unit.
 int resParserlex( YYSTYPE* yylval );
 
-void resParsererror( const char* msg );
+void resParsererror( XxResources *, const char* msg );
 
 // Declare some parser functions and data defined in resParser.cpp
 namespace XxResParserNS {
@@ -144,7 +149,6 @@
 %type <num> boolkwd
 
 %start xxdiffrc
-%pure_parser
 
 %%
 xxdiffrc	: stmts
@@ -188,7 +192,7 @@
                       RESOURCES->setPreferredGeometry( geometry );
                    }
                    else {
-                      yyerror( "Bad geometry specification." );
+                      yyerror( NULL, "Bad geometry specification." );
                       // Should never happen, the lexer regexp should be tough
                       // enough.
                    }
@@ -212,7 +216,7 @@
                       QString err = QString( "Requested style key does not exist." );
                       err += QString( "\nValid styles are: " );
                       err += styles.join( ", " );
-                      yyerror( err.toLatin1().constData() );
+                      yyerror( NULL, err.toLatin1().constData() );
                    }
                 }
                 ;
@@ -224,7 +228,7 @@
                       char buf[2048];
                       ::snprintf( buf, 2048,
                                   "Unrecognized accelerator: %s\n", $5 );
-                      yyerror( buf );
+                      yyerror( NULL, buf );
                    }
                 }
 		;
